package websocket.netty;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import io.netty.util.CharsetUtil;
import org.apache.commons.codec.binary.Hex;

import java.util.List;


public class HexDecoder extends ByteToMessageDecoder {
    @Override
    protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list) throws Exception {
        // 将ByteBuf中的数据按照hex格式读出来，注意转义字符\需要加上，表示斜杠本身就是字符
        String hexString = byteBuf.toString(CharsetUtil.UTF_8)
                .replaceAll("\\\\", "")
                .replaceAll(" ", "")
                .replaceAll("\r", "")
                .replaceAll("\n", "");

        // 将hex格式数据转换为byte数组
        byte[] bytes = Hex.decodeHex(hexString.toCharArray());
        // 将byte数组添加到输出列表中
        list.add(bytes);
    }
}
